package br.com.pucrs.tcc.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

import br.com.pucrs.tcc.ed.Convite;
import br.com.pucrs.tcc.exception.ConviteException;
import br.com.pucrs.tcc.rn.ConviteRN;
import br.com.pucrs.tcc.util.jsf.MensagemUtil;
import br.com.pucrs.tcc.util.jsf.SessionUtil;
import br.com.pucrs.tcc.util.mail.EmailUtil;

@ManagedBean(name = "ConviteListaBean")
@ViewScoped
public class ConviteListaBean {

	private List<Convite> convitesEnviados;

	private Convite conviteRemove;

	@EJB
	private ConviteRN mConviteRN;

	public ConviteListaBean() {

	}

	public List<Convite> getConvitesEnviados() {
		return convitesEnviados;
	}

	public void setConvitesEnviados(List<Convite> convitesEnviados) {
		this.convitesEnviados = convitesEnviados;
	}

	public Convite getConviteRemove() {
		return conviteRemove;
	}

	public void setConviteRemove(Convite conviteRemove) {
		this.conviteRemove = conviteRemove;
	}

	@PostConstruct
	public void carregaDados() {
		convitesEnviados = mConviteRN.listaRealizados(SessionUtil.getMatriculaUsuarioLogado());
	}

	public void enviarAlerta(Convite convite) {
		try {
			// Envia email para o convidado
			EmailUtil.enviaHTML(convite.getConvidado().getEmail(), "Convite de Trabalho", EmailUtil.montaMensagemConvite(convite));
			MensagemUtil.mostraMensagemSucesso("Lembrete enviado com sucesso.");
		} catch (AddressException e) {
			MensagemUtil.mostraMensagemFatal(e.getMessage());
		} catch (MessagingException e) {
			MensagemUtil.mostraMensagemFatal(e.getMessage());
		} catch (Exception e) {
			MensagemUtil.mostraMensagemFatal(e.getMessage());
		}
	}

	public void cancelaConvite() {
		if (conviteRemove != null) {
			try {
				mConviteRN.cancelaConvite(conviteRemove.getId());
				convitesEnviados = mConviteRN.listaRealizados(SessionUtil.getMatriculaUsuarioLogado());
				
				MensagemUtil.mostraMensagemSucesso("Convite cancelado com sucesso.");
			} catch (ConviteException e) {
				MensagemUtil.mostraMensagemErro(e.getMessage());
			}
			conviteRemove = null;
		}
	}

}
